package DAO;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import to.Amostra;
import to.Propriedade;
import util.HibernateUtil;

public class AmostraDAO {

	public Amostra buscarPorCodigo(Integer codigo) {

		Amostra retorno = new Amostra();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Amostra.class);
			criteria.add(Restrictions.idEq(codigo));
			retorno = (Amostra) criteria.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			session.close();
		}

		return retorno;
	}

	public ArrayList<Amostra> buscarTodasAmostras() {

		ArrayList<Amostra> capturaAmostra = new ArrayList<Amostra>();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Amostra.class);
			capturaAmostra = (ArrayList<Amostra>) criteria.list();
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			session.close();
		}

		return capturaAmostra;
	}

	public List<Amostra> buscarAmostraPorPropriedade(Integer propriedade)
			throws Exception {

		List<Amostra> lista = null;

		try {

			Session session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Amostra.class);
			criteria.createAlias("propriedade", "p");
			criteria.add(Restrictions.eq("p.codigo", propriedade));
			criteria.add(Restrictions.like("Status", "%Aguardando Processo%"));
			criteria.addOrder(Order.asc("p.nome"));
			lista = (List<Amostra>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return lista;
	}

	public static void main(String[] args) throws Exception {
		List<Amostra> lista = AmostraDAO.class.newInstance()
				.buscarAmostraPorPropriedade(1);
		System.out.println(lista.size());
	}

	public List<Amostra> buscarAmostraPorPropriedade2(Propriedade propriedade)
			throws Exception {

		List<Amostra> lista = null;

		try {

			Session session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Amostra.class);
			criteria.add(Restrictions.eq("propriedade", propriedade));
			criteria.addOrder(Order.asc("codigo"));
			lista = (List<Amostra>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return lista;
	}

}